nondeterministic finite automation